home *** CD-ROM | disk | FTP | other *** search
/ SGI Hot Mix 17 / Hot Mix 17.iso / HM17_SGI / research / lib / fslid_alloc.pro < prev    next >
Text File  |  1997-07-08  |  9KB  |  312 lines

  1. ;
  2. ; $Id: fslid_alloc.pro,v 1.10 1997/03/18 00:08:08 lubos Exp $
  3. ;
  4. ;  WidFslider
  5. ;   Widget Fslider class library
  6. ;
  7. ; Copyright (c) 1993-1997, Research Systems, Inc.  All rights reserved.
  8. ;   Unauthorized reproduction prohibited.
  9. ;
  10. ; MODIFICATION HISTORY
  11. ;       Written by:     Joshua Goldstein,       12/93
  12. ;
  13. ;
  14.  
  15.  
  16. ;
  17. ;  FSLID_Icon
  18. ;       Return the floating point slider toolbar icon
  19. ;
  20. FUNCTION FSLID_Icon
  21.   RETURN, [ $
  22.     [ 0b, 0b, 0b, 0b ], $
  23.     [ 0b, 0b, 0b, 0b ], $
  24.     [ 0b, 0b, 0b, 0b ], $
  25.     [ 0b, 4b, 192b, 1b ], $
  26.     [ 0b, 6b, 224b, 3b ], $
  27.     [ 0b, 7b, 48b, 6b ], $
  28.     [ 128b, 7b, 24b, 12b ], $
  29.     [ 0b, 6b, 24b, 12b ], $
  30.     [ 0b, 6b, 24b, 12b ], $
  31.     [ 0b, 6b, 24b, 12b ], $
  32.     [ 0b, 6b, 24b, 12b ], $
  33.     [ 0b, 6b, 24b, 12b ], $
  34.     [ 0b, 6b, 24b, 12b ], $
  35.     [ 0b, 6b, 24b, 12b ], $
  36.     [ 0b, 6b, 48b, 6b ], $
  37.     [ 128b, 31b, 227b, 3b ], $
  38.     [ 192b, 63b, 195b, 1b ], $
  39.     [ 0b, 0b, 0b, 0b ], $
  40.     [ 0b, 0b, 0b, 0b ], $
  41.     [ 252b, 255b, 255b, 63b ], $
  42.     [ 252b, 255b, 255b, 63b ], $
  43.     [ 12b, 248b, 127b, 16b ], $
  44.     [ 12b, 8b, 67b, 32b ], $
  45.     [ 12b, 8b, 67b, 16b ], $
  46.     [ 12b, 8b, 67b, 32b ], $
  47.     [ 12b, 8b, 67b, 16b ], $
  48.     [ 12b, 8b, 67b, 32b ], $
  49.     [ 12b, 248b, 127b, 16b ], $
  50.     [ 172b, 170b, 170b, 42b ], $
  51.     [ 84b, 85b, 85b, 21b ], $
  52.     [ 0b, 0b, 0b, 0b ], $
  53.     [ 0b, 0b, 0b, 0b ]  $
  54.   ]
  55. END
  56.  
  57.  
  58. ;
  59. ;  FSLID_Copy
  60. ;   Copy a floating point slider.
  61. ;
  62. PRO FSLID_Copy, Ptr, Copy
  63.     GenCopy, Ptr, Copy
  64. END
  65.  
  66.  
  67. ;
  68. ; FSLID_Destroy
  69. ;   Release resources for the given floating point slider
  70. ;
  71. PRO FSLID_Destroy, Ptr
  72.     GenDestroy, Ptr
  73. END
  74.  
  75.  
  76. ;
  77. ;  FSLID_Event
  78. ;   Event handling routine for floating point slider dialog
  79. ;
  80. PRO FSLID_Event, Event
  81.     WIDGET_CONTROL, Event.Id, GET_UVALUE=Ev
  82.     WIDGET_CONTROL, Event.Top, GET_UVALUE=Binfo, /NO_COPY
  83.     Ptr2Obj, Binfo.ObjPtr, Obj
  84.  
  85.     CASE Ev OF
  86.  
  87.     'TITLE':    Obj.Title       = Event.Value
  88.     'SMIN':     Obj.FslidMin    = Event.Value
  89.     'SINIT':    Obj.FslidStart  = Event.Value
  90.     'SMAX':     Obj.FslidMax    = Event.Value
  91.     'NAME':     Obj.Name        = Event.Value
  92.     'FRAME':    Obj.FrameSize   = Event.Value
  93.     'UVALUE':   Obj.Uvalue      = Event.Value
  94.     'FORMAT':   Obj.LabelFormat = Event.Value
  95.     'XSIZE':    Obj.XSize       = Event.Value
  96.     'YSIZE':    Obj.YSize       = Event.Value
  97.  
  98.     'DO_DRAG':      Obj.FslidDrag       = 1 - Obj.FslidDrag
  99.     'DO_VERTICAL':  Obj.FslidVertical   = 1 - Obj.FslidVertical
  100.     'DO_SUPPRESS':  Obj.FslidSuppress   = 1 - Obj.FslidSuppress
  101.  
  102.     'DONE':     BEGIN
  103.         Accept, Obj, Binfo.ObjPtr
  104.         WIDGET_CONTROL, Event.Top, SET_UVALUE=Binfo, /NO_COPY
  105.         WIDGET_CONTROL, Event.Top, /DESTROY
  106.         RETURN
  107.         END
  108.  
  109.     'CANCEL':   BEGIN
  110.         Cancel, Obj, Binfo.ObjPtr
  111.         RETURN
  112.         END
  113.     ELSE:           MESSAGE, 'Unprocessed event: ' + Ev
  114.     ENDCASE
  115.  
  116.     Dirty   = 1
  117.     ;   Goto next input field on a <CR>
  118.     SetNextFocus, Binfo, Event
  119.     Obj2Ptr, Obj, Binfo.ObjPtr
  120.     WIDGET_CONTROL, Event.Top, SET_UVALUE=Binfo, /NO_COPY
  121. END
  122.  
  123.  
  124. ;
  125. ;  FSLID_Build
  126. ;   Create a dialog box a floating point slider object.  If ptr is nil then
  127. ;   create the object as well.
  128. ;
  129. PRO FSLID_Build, Ptr, ParPtr
  130.   COMMON WidEd_Comm
  131.  
  132.     FSLID_Alloc, ParPtr, Ptr
  133.     MgrName = 'WE_FSLID' + STRTRIM(Ptr, 2)
  134.     IF XRegistered(MgrName) THEN RETURN
  135.  
  136.     Title   = GetId(Ptr) + '(Child of ' + GetId(ParPtr) + ')'
  137.  
  138.     Ptr2Obj, Ptr, Obj
  139.     IF SmallScreen[0] NE 0 THEN BEGIN
  140.         Base    = WIDGET_BASE(/COLUMN, TITLE=Title, GROUP_LEADER=TopDlg, $
  141.                         X_SCROLL_SIZE=SmallScreen[0], $
  142.                         Y_SCROLL_SIZE=SmallScreen[1] )
  143.     ENDIF ELSE BEGIN
  144.         Base    = WIDGET_BASE(/COLUMN, TITLE=Title, GROUP_LEADER=TopDlg)
  145.     ENDELSE
  146.     Foci    = LONARR(10)
  147.  
  148.     ;   Event Related Info
  149.  
  150.     Base1   = WIDGET_BASE(Base, /FRAME, /COLUMN)
  151.     Lab     = WIDGET_LABEL(Base1, VALUE="Basic Information")
  152.     Foci[0] = Field(Base1, "Slider Title:",Obj.Title,'TITLE',SIZE=50,/STRING)
  153.     Base2   = WIDGET_BASE(Base1,/ROW)
  154.     Foci[1] = Field(Base2, "Minimum:", Obj.FslidMin, 'SMIN', SIZE=15, /FLOAT)
  155.     Foci[2] = Field(Base2, "Initial:",Obj.FslidStart,'SINIT',SIZE=15, /FLOAT)
  156.     Foci[3] = Field(Base2, "Maximum:", Obj.FslidMax, 'SMAX', SIZE=15, /FLOAT)
  157.  
  158.     Base2   = WIDGET_BASE(Base1, /ROW, /NONEXCLUSIVE)
  159.     Button  = WIDGET_BUTTON(Base2, VALUE='Generate Drag Events', $
  160.                             UVALUE='DO_DRAG')
  161.     IF Obj.FslidDrag THEN WIDGET_CONTROL, Button, /SET_BUTTON
  162.     Button  = WIDGET_BUTTON(Base2, VALUE='Vertical Slider', $
  163.                             UVALUE='DO_VERTICAL')
  164.     IF Obj.FslidVertical THEN WIDGET_CONTROL, Button, /SET_BUTTON
  165.     Button  = WIDGET_BUTTON(Base2, VALUE='Suppress display of current value', $
  166.                             UVALUE='DO_SUPPRESS')
  167.     IF Obj.FslidDrag THEN WIDGET_CONTROL, Button, /SET_BUTTON
  168.  
  169.     BuildOther, Base1, Obj, Foci, 4, /FRAME
  170.  
  171.     Base1   = WIDGET_BASE(Base, /FRAME, /COLUMN)
  172.     Lab     = WIDGET_LABEL(Base1, VALUE="Slider Appearance Controls")
  173.     Foci[7] = Field(Base1, "Label Format:", Obj.LabelFormat, "FORMAT", $
  174.                     SIZE=30, /STRING)
  175.     BuildXY, Base1, Obj, Foci, 8, /SIZE
  176.     BuildOkCancel, Base, Obj
  177.  
  178.     DlgInfo     = { $
  179.         Foci:       Foci, $
  180.         ObjPtr:     Ptr $
  181.     }
  182.     Obj.Dialog  = Base
  183.     WIDGET_CONTROL, Base, SET_UVALUE=DlgInfo, /NO_COPY
  184.     WIDGET_CONTROL, Base, /REALIZE
  185.     XMANAGER, MgrName, Base, EVENT_HANDLER='FSLID_Event', CLEANUP='MISC_Kill'
  186.     Obj2Ptr, Obj, Ptr
  187. END
  188.  
  189.  
  190. ;
  191. ;  FSLID_Save
  192. ;   Save floating point slider information to a file.
  193. ;   This is a simple object to save.
  194. ;
  195. PRO FSLID_Save, Unit, Ptr
  196.     GenWrite, Unit, Ptr
  197. END
  198.  
  199.  
  200. ;
  201. ;  FSLID_Restore
  202. ;   Read in a floating point slider object from a file
  203. ;
  204. PRO FSLID_Restore, Unit, Parent, Ptr
  205.     MISC_Restore, Unit, Parent, Ptr, "FSLID", 0
  206. END
  207.  
  208.  
  209. ;
  210. ;  FSLID_Generate
  211. ;   Create a floating point slider object for previewing
  212. ;
  213. PRO FSLID_Generate, Base, Ptr
  214.   COMMON WidEd_Comm
  215.  
  216.     Ptr2Obj, Ptr, Obj
  217.     Id  = 0L            ; Prevent EXECUTE from creating a new variable
  218.  
  219.     ;   Value may not be outside of min/max
  220.     Value   = Obj.FSlidMin > Obj.FSlidStart < Obj.FSlidMax
  221.  
  222.     Cmd = 'Id = CW_FSLIDER(Base'
  223.     IAddCmd, Cmd, Obj.FrameSize, 'FRAME'
  224.     IF Obj.FslidMin NE Obj.FslidMax THEN BEGIN
  225.         IAddCmd, Cmd, Obj.FslidMin, 'MINIMUM', /FORCE
  226.         IAddCmd, Cmd, Obj.FslidMax, 'MAXIMUM', /FORCE
  227.     ENDIF
  228.     IAddCmd, Cmd, Obj.FslidSuppress, 'SUPPRESS_VALUE'
  229.     SAddCmd, Cmd, Obj.Title, 'TITLE'
  230.     IAddCmd, Cmd, Value, 'VALUE', /FORCE
  231.     IAddCmd, Cmd, Obj.FslidVertical, 'VERTICAL'
  232.     IAddCmd, Cmd, Obj.XSize, 'XSIZE'
  233.     IAddCmd, Cmd, Obj.YSize, 'YSIZE'
  234.  
  235.     Obj2Ptr, Obj, Ptr
  236.  
  237.     ; Create fslid
  238.     IF EXECUTE(Cmd+')') NE 1 THEN BEGIN
  239.         MESSAGE,'Could not create Flt Slider ' + VarName[Ptr]
  240.     ENDIF
  241. END
  242.  
  243. ;
  244. ;  FSLID_GenWid
  245. ;   Create IDL code for creating a floating point slider (CW_FSLIDER)
  246. ;
  247. PRO FSLID_GenWid, Unit, Ptr, Parent
  248.  
  249.     Name    = VarId(Ptr)
  250.     Ptr2Obj, Ptr, Obj
  251.  
  252.     ;   Value may not be outside of min/max
  253.     Value   = Obj.FSlidMin > Obj.FSlidStart < Obj.FSlidMax
  254.  
  255.     XPRINTF, Unit, FORMAT='("  ",A," = CW_FSLIDER( ",A)', $
  256.         Name, Parent, /NO_EOL
  257.     ISaveCmd, Unit, Obj.FSlidDrag, "DRAG"
  258.     SSaveCmd, Unit, Obj.LabelFormat, "FORMAT"
  259.     ISaveCmd, Unit, Obj.FrameSize, "FRAME"
  260.     IF Obj.FslidMin NE Obj.FslidMax THEN BEGIN
  261.         ISaveCmd, Unit, Obj.FSlidMax, "MAXIMUM", /FORCE
  262.         ISaveCmd, Unit, Obj.FSlidMin, "MINIMUM", /FORCE
  263.     ENDIF
  264.     ISaveCmd, Unit, Obj.FSlidSuppress, "SUPPRESS"
  265.     SSaveCmd, Unit, Obj.Title, "TITLE"
  266.     SSaveCmd, Unit, UValue(Obj, Ptr), "UVALUE"
  267.     ISaveCmd, Unit, Value, "VALUE", /FORCE
  268.     ISaveCmd, Unit, Obj.FSlidVertical, "VERTICAL"
  269.     ISaveCmd, Unit, Obj.XSize, "XSIZE"
  270.     ISaveCmd, Unit, Obj.YSize, "YSIZE"
  271.     XPRINTF, Unit, ')'
  272.  
  273.     Obj2Ptr, Obj, Ptr
  274. END
  275.  
  276.  
  277. ;
  278. ;  FSLID_Alloc
  279. ;       Allocate a floating point slider object.  Don't allocate if ptr
  280. ;   is non-nil
  281. ;
  282. PRO FSLID_Alloc, Parent, Ptr
  283.   COMMON WidEd_Comm    
  284.  
  285.     IF KEYWORD_SET(Ptr) NE 0 THEN RETURN
  286.  
  287.     Ptr = WIDGET_BASE(GROUP=TopDlg)
  288.  
  289.     Obj = {                     $
  290.         WE_FSLID,               $
  291.         Type:           'FSLID',$
  292.         Parent:         Parent, $ ; Pointer to parent
  293.         Id:             NewId(),$ ; Permanent Id
  294.         Dialog:         0L,     $ ; Save Dialog ID (need for Cut consistency)
  295.         Next:           0L,     $ ; index of next child/free/top
  296.         Name:           '',     $ ; object name
  297.         Title:          '',     $ ; Fslid title
  298.         FrameSize:      0,      $
  299.         LabelFormat:    '',     $
  300.         XSize:          0,      $
  301.         YSize:          0,      $
  302.         UValue:         '',     $
  303.         FslidDrag:      0,      $ ; slider flags
  304.         FslidVertical:  0,      $
  305.         FslidSuppress:  0,      $
  306.         FslidMin:       0.0,    $ ; slider basic info
  307.         FslidStart:     0.0,    $
  308.         FslidMax:       0.0     $
  309.     }
  310.     Obj2Ptr, Obj, Ptr
  311. END
  312.